#ifndef DISPLAYABLE_HPP_INCLUDED
#define DISPLAYABLE_HPP_INCLUDED

#include <SFML/Graphics.hpp>
#include <iostream>

struct ThreadDisplay;

/**
 * Implement basic methods to draw something
 */
class Displayable
{
    public:
	Displayable(ThreadDisplay *);
	virtual ~Displayable();
	/**
	 * draw the oject on the renderWindow
	 *
	 * param : sf::RenderWindow*
	 */
    virtual void draw(sf::RenderWindow*) = 0;
	/**
	 * caught the events from the window. This event can be call many times before draw the screen
	 *
	 * param : Event
	 */
    virtual void DoEvent(sf::Event) = 0;
	/**
	 * Lauch real time event (eg. to use mouse position)
	 *
	 * param : Event
	 */
    virtual void DoRealTimeEvent(const sf::Input&) = 0;
    protected:
    	ThreadDisplay * GetScreenManager() { return m_screenManager; };
    private:
    	ThreadDisplay * m_screenManager;
};


#endif // DISPLAYABLE_HPP_INCLUDED
